


#include <iostream>

class MyClass {
private:
    // 私有构造函数
    MyClass() {
        std::cout << "MyClass Constructor" << std::endl;
    }
    
    // 私有析构函数
    ~MyClass() {
        std::cout << "MyClass Destructor" << std::endl;
    }

    // 声明友元类
    friend class MyClassManager;

public:
    static MyClass* create() {
        return new MyClass();
    }
};

class MyClassManager {
public:
    static void destroy(MyClass* obj) {
        delete obj; // 可以调用私有析构函数
    }
};


int friend_class_test()
{
    std::cout << "friend_class_test" << std::endl;

    /* 创建对象 */
    MyClass* obj = MyClass::create(); 

    /* 使用 MyClassManager 来销毁对象 */
    MyClassManager::destroy(obj); /* 通过友元类调用私有析构函数 */

    return 0;
}
